/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.service.time.ntptime;

import java.net.InetAddress;

/**
 * This class represents a data structure describing  the useful
 * information that can be extracted from a NtpDatagramPacket.
 * Please see rfc2030 for more details.
 * @author Hasan Bulut  - hbulut@indiana.edu
 */
public class NtpInfo {
  //~ Instance fields ----------------------------------------------------------

  /**
 * InetAddress of the server.
 */
  public InetAddress serverAddress;

  /**
 * Reference timestamp.
 */
  public NtpTimestamp referenceTimeStamp;

  /**
 * Reference identifier.
 */
  public String referenceIdentifier;

  /**
 * Precision of the server clock (in milliseconds).
 */
  public double precision;

  /**
 * Total roundtrip delay from the server to the primary server
 * (in milliseconds).
 */
  public double rootDelay;

  /**
 * Nominal error relative to the primary reference source
 */
  public double rootDispersion;

  /**
 * Leap year indicator.
 */
  public int leapYearIndicator;

  /**
 * Mode of the communication with the server.
 */
  public int mode;

  /**
 * Poll Interval in seconds.
 */
  public int pollInterval;

  /**
 * The stratum. Distance (in hops) from the server to the primary server.
 */
  public int stratum;

  /**
 * Version number of the packet.
 */
  public int versionNumber;

  /**
 * Offset of the local clock versus the server clock. It is calculated
 * according to NTP protocol version 3.
 */
  public long offset;

  /**
 * Originate time in milliseconds
 */
  public long originate = 0;

  /**
 * Receive time in milliseconds
 */
  public long receive = 0;

  /**
 * Reception time in milliseconds
 */
  public long reception = 0;

  /**
 * Roundtrip delay (in milliseconds). Calculated according to NTP protocol
 * version 3.
 */
  public long roundTripDelay;

  /**
 * Transmit time in milliseconds
 */
  public long transmit = 0;

  //~ Methods ------------------------------------------------------------------

  /**
 * Converts this object into a String representation.
 * @return String - String representation of this object
 */
  public String toString() {
    String s = "";
    s = "Server address : " + serverAddress + "\n";
    s += "Leap year indicator : " + leapYearIndicator + "\n";
    s += "Version number : " + versionNumber + "\n";
    s += "Mode : " + mode + "\n";
    s += "Stratum : " + stratum + "\n";
    s += "Poll interval : " + pollInterval + " s\n";
    s += "Precision : " + precision + " ms\n";
    s += "Root delay : " + rootDelay + " ms\n";
    s += "Root dispersion : " + rootDispersion + " ms\n";
    s += "Reference address : " + referenceIdentifier + "\n";
    s += "Reference timestamp : " + referenceTimeStamp + "\n";
    s += "Originate time: " + originate + " ms\n";
    s += "Receive time  : " + receive + " ms\n";
    s += "Transmit time : " + transmit + " ms\n";
    s += "Reception time: " + reception + " ms\n";
    s += "Round trip delay : " + roundTripDelay + " ms\n";
    s += "Offset : " + offset + " ms";
    return s;
  }
}
